import os
import json
import llmShift as llm


def str2md(path, content):
    with open(path, "a", encoding="utf-8") as file:
        file.write(content + '\n')


def generation(title, json_path):
    with open(json_path, "r", encoding="utf-8") as file:
        jsonfile = json.load(file)
    with open(os.path.dirname(json_path) + f'/{title}_parse.json', "r", encoding="utf-8") as file:
        jsonfile2 = json.load(file)
    mdpath = f"thesisDirectory/{jsonfile['title']}/{jsonfile['title']}.md"
    for chapters in jsonfile["chapters"]:
        chaptersTitle = chapters["title"]
        str2md(mdpath, '# ' + chaptersTitle)
        chaptersPrompt = '''
        - Role: 论文写作指导专家
        - Background: 用户正在撰写学术论文，需要为某一章节撰写概述部分。概述是对本章内容的引入和高度概括。
        - Profile: 你是一位经验丰富的论文写作指导专家，对学术论文的结构和写作技巧有着深入的理解，能够根据论文题目和章节目录，精准地撰写概述部分。
        - Skills: 你具备深厚的学术写作功底，熟悉各种学术领域的写作规范，擅长运用简洁而富有吸引力的语言，将复杂的学术内容进行清晰的阐述。
        - Goals: 根据用户提供的论文题目和章节目录，撰写一段300字左右的概述，确保概述内容与论文主题还有系统代码紧密相关，能够自然地引出后续章节的内容。
        - Constrains: 引言部分应避免使用小标题，语言表达应简洁明了，逻辑清晰，字数控制在300字左右。
        - OutputFormat: 一段完整的概述文字，无小标题，字数约300字。除了概述部分之外不要出现其他无关的文字，不要写思考过程。
        - Workflow:
          1. 深入理解论文题目和章节目以及录系统代码，明确章节的核心内容和主题方向。
          2. 以简洁的语言概述章节的研究背景或问题，引出研究的必要性和重要性。
          3. 简要阐述本章节的主要内容以及将如何展开论述。
        - Example:
            - 例子1：论文题目：基于GraphRAG的论文爬取与问答系统 ；章节标题：第三章 关键技术的分析。
                  本章聚焦于基于GraphRAG的论文爬取和问答系统的核心技术环节，包括提示词设计、代词处理、实体关系提取、知识图谱搭建以及检索优化。这些技术点不仅直接影响系统的准确性和运行效率，还决定了系统在复杂知识场景下的表现能力。因此本章将详细分析这些核心技术，来阐述GraphRAG系统的每个关键环节的实现逻辑以及实现方式。
        '''
        chaptersQuery = "论文题目：" + title + "；章节标题：" + chapters["title"] + "；章节结构：" + str(
            chapters) + "；系统核心代码：" + str(
            jsonfile2)
        chaptersContent = llm.version_choose('deepseek-chat', 0.1, chaptersPrompt + chaptersQuery)
        print(chaptersContent)
        str2md(mdpath, chaptersContent)
        for sections in chapters["sections"]:
            sectionsTitle = sections["title"]
            str2md(mdpath, '## ' + sectionsTitle)
            if "subsections" in sections:
                for subsections in sections["subsections"]:
                    subsectionsTitle = subsections["title"]
                    str2md(mdpath, '### ' + subsectionsTitle)
                    subsectionsPrompt = '''
                        - Role: 论文撰写专家和章节内容规划师
                        - Background: 用户正在撰写学术论文，需要针对特定章节标题撰写对应内容。
                        - Profile: 你是一位资深的学术论文撰写专家，对学术写作的结构、逻辑和语言风格有着深入的理解。你擅长将复杂的概念以清晰、准确的方式表达出来，并能够根据章节标题撰写高质量的内容。
                        - Skills: 你具备深厚的学术背景和丰富的写作经验，能够快速理解章节标题的核心内容，撰写出符合学术规范的章节内容。
                        - Goals: 根据用户提供的章节标题，以及系统代码，撰写出逻辑严谨、内容充实的章节内容。
                        - Constrains: 章节内容应符合学术写作规范，语言准确、简洁、严谨。代码示例应简洁明了，不超过10行，且与章节内容紧密相关。
                        - OutputFormat: 一段完整的文字，不要出现小标题，如有代码引用以注释形式说明其作用和相关性。注意不要出现其他无关的文字，不要写思考过程。
                        - Workflow:
                          1. 确定章节标题的核心概念和目标。
                          3. 撰写主体内容，详细阐述章节主题，必要时可以参考用户提供的系统代码作为内容支撑。
                    '''
                    subsectionsQuery = "论文题目：" + title + "；章节标题：" + subsections["title"] + "；章节结构：" + str(
                        subsections) + "；系统核心代码：" + str(
                        jsonfile2)
                    subsectionsContent = llm.version_choose('deepseek-chat', 0.1, subsectionsPrompt + subsectionsQuery)
                    print(subsectionsContent)
                    str2md(mdpath, subsectionsContent)
            else:
                sectionsPrompt = '''
                        - Role: 论文撰写专家和章节内容规划师
                        - Background: 用户正在撰写学术论文，需要针对特定章节标题撰写对应内容。
                        - Profile: 你是一位资深的学术论文撰写专家，对学术写作的结构、逻辑和语言风格有着深入的理解。你擅长将复杂的概念以清晰、准确的方式表达出来，并能够根据章节标题撰写高质量的内容。
                        - Skills: 你具备深厚的学术背景和丰富的写作经验，能够快速理解章节标题的核心内容，撰写出符合学术规范的章节内容。
                        - Goals: 根据用户提供的章节标题，以及系统代码，撰写出逻辑严谨、内容充实的章节内容。
                        - Constrains: 章节内容应符合学术写作规范，语言准确、简洁、严谨。代码示例应简洁明了，不超过10行，且与章节内容紧密相关。
                        - OutputFormat: 一段完整的文字，不要出现小标题，如有代码引用以注释形式说明其作用和相关性。注意不要出现其他无关的文字，不要写思考过程。
                        - Workflow:
                          1. 确定章节标题的核心概念和目标。
                          3. 撰写主体内容，详细阐述章节主题，必要时可以参考用户提供的系统代码作为内容支撑。
                    '''
                sectionsQuery = "论文题目：" + title + "；章节标题：" + sections["title"] + "；章节结构：" + str(
                    sections) + "；系统核心代码：" + str(
                    jsonfile2)
                sectionsContent = llm.version_choose('deepseek-chat', 0.1, sectionsPrompt + sectionsQuery)
                print(sectionsContent)
                str2md(mdpath, sectionsContent)


# generation('基于langchain和vue的全屋定制系统的设计与实现',
#            'thesisDirectory/基于langchain和vue的全屋定制系统的设计与实现/基于langchain和vue的全屋定制系统的设计与实现_directory.json')
